﻿/**
 * 
 * @file FITKAcousticsSEAModel.h
 * @brief SEA模型声明
 * @author LiBaojun (libaojunqd@foxmail.com)
 * @date 2024-10-06
 * 
 */
#ifndef _FITKACOUSTICS_SEAMODEL_H___
#define _FITKACOUSTICS_SEAMODEL_H___

#include "FITKAcousticsModelAPI.h"
#include "FITK_Interface/FITKInterfaceModel/FITKAbstractModel.h"
 

namespace Acoustics
{
    class FITKAbstractSEASubSys;
    class FITKAcousticsSEASubSysManager;
    class FITKSEAFaceManager;
    /**
     * @brief SEA模型定义
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-10-06
     */
    class FITKAcousticsModelAPI FITKAcousticsSEAModel : 
        public Interface::FITKAbstractModel
    {
        FITKCLASS(Acoustics, FITKAcousticsSEAModel);
    public:
        /**
         * @brief Construct a new FITKAcousticsSEAModel object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        explicit FITKAcousticsSEAModel();
        /**
         * @brief Destroy the FITKAcousticsSEAModel object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-10-06
         */
        virtual ~FITKAcousticsSEAModel();
        /**
         * @brief 获取模型类型
         * @return AbsModelType
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-02-27
         */
        virtual Interface::FITKModelEnum::AbsModelType getAbsModelType() override;
         /**
          * @brief 获取子系统管理器
          * @return FITKAcousticsSEASubSysManager* 
          * @author LiBaojun (libaojunqd@foxmail.com) 
          * @date 2024-10-06
          */
        FITKAcousticsSEASubSysManager* getSEASubSysManager();
        /**
         * @brief Face管理器
         * @return FITKSEAFaceManager*
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-06
         */
        FITKSEAFaceManager* getSEAFaceManager();
        /**
         * @brief 获取与节点关联的子系统
         * @param[i] nodeIDs  输入节点列表
         * @param[i] common 求节点关联子系统的交集或者并集  true-输出交集  false-输出并集
         * @return QList<FITKAbstractSEASubSys*>
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-11-14
         */
        QList<FITKAbstractSEASubSys*> getSEASubsysConnectedWithNodes(const QList<int>& nodeIDs, const bool& common = false ) const;
        /**
         * @brief    清理SEA模型
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2024-11-21
         */
        void clearSEAModel();
        
    protected:
        /**
          * @brief 子系统管理器
          * @author LiBaojun (libaojunqd@foxmail.com)
          * @date 2024-10-06
          */
        FITKAcousticsSEASubSysManager* _subsysMgr{};
        /**
          * @brief Face管理器
          * @author LiBaojun (libaojunqd@foxmail.com)
          * @date 2024-10-06
          */
        FITKSEAFaceManager* _faceManager{};
    };
}


#endif
